/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.globalsolutionslt.controlador;

import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TemporalType;
import sv.com.globalsolutionslt.entidades.AreaEmpresa;
import sv.com.globalsolutionslt.entidades.EstadoPublicacion;
import sv.com.globalsolutionslt.entidades.Publicacion;
import sv.com.globalsolutionslt.entidades.TipoCargo;

/**
 *
 * @author sysmanager
 */
@Stateless
public class PublicacionFacade extends AbstractFacade<Publicacion> {

    @PersistenceContext(unitName = "BoldeDeTrabajoPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public PublicacionFacade() {
        super(Publicacion.class);
    }
    public long postulacionExistente(Integer p, Integer per){
        long c=0; 
        try {        
            String sql = "SELECT count(p) FROM Postulacion p "
                       + "where p.idPublicacion.idPublicacion="+p+""
                       + " and p.idPersona.idPersona="+per;            
            Query q = em.createQuery(sql);            
            c = (long) q.getSingleResult();
        } catch (NoResultException e) {
                System.out.println("Sin resultados");
        }
        return c;
    }
    public List<Publicacion> PublicacioneEmpresa(AreaEmpresa a, TipoCargo t, String p, double pg) {        

        List<Publicacion> publicaciones=null;    
        Date date= new Date();
        long area;
        String where="";
        
        try {   
            if(a!=null)
            {where+=" and p.idTipoCargo.idAreaEmpresa.idAreaEmpresa="+a.getIdAreaEmpresa();}
            if(p!=null && p.trim().length()>0)
            {where+=" and p.descripcion like '%"+p.trim()+"%' ";}
            if(t!=null)
            {where+=" and p.idTipoCargo.idTipoCargo="+t.getIdTipoCargo();}
            
            String sql = "SELECT p FROM Publicacion p where p.idPublicacion>0 "+where+" "
                       + " order by p.idPublicacion desc";  
            System.out.println(sql);
            Query q = em.createQuery(sql); 
            q.setFirstResult((int) pg*10);
            q.setMaxResults(10);            
            publicaciones = q.getResultList();        
        } catch (NoResultException e) {
                System.out.println("Sin resultados");
        }
        return publicaciones;
    }  
    public long CantidadPublicacioneEmpresa(AreaEmpresa a, TipoCargo t, String p) {        

        long publicaciones=0;    
        Date date= new Date();
        long area;
        String where="";
        
        try {   
            if(a!=null)
            {where+=" and p.idTipoCargo.idAreaEmpresa.idAreaEmpresa="+a.getIdAreaEmpresa();}
            if(p!=null && p.trim().length()>0)
            {where+=" and p.descripcion like '%"+p.trim()+"%' ";}
            if(t!=null)
            {where+=" and p.idTipoCargo.idTipoCargo="+t.getIdTipoCargo();}
            
            String sql = "SELECT count(p) FROM Publicacion p where p.idPublicacion>0 "+where+" "
                       + " order by p.idPublicacion desc";  
            System.out.println(sql);
            Query q = em.createQuery(sql);             
            publicaciones = (long) q.getSingleResult();        
        } catch (NoResultException e) {
                System.out.println("Sin resultados");
        }
        return publicaciones;
    }    
    public List<Publicacion> PublicacioneActiva(AreaEmpresa a, TipoCargo t, String p, double pg) {        

        List<Publicacion> publicaciones=null;    
        Date date= new Date();
        long area;
        String where="";
        
        try {   
            if(a!=null)
            {where+=" and p.idTipoCargo.idAreaEmpresa.idAreaEmpresa="+a.getIdAreaEmpresa();}
            if(p!=null && p.trim().length()>0)
            {where+=" and p.descripcion like '%"+p.trim()+"%' ";}
            if(t!=null)
            {where+=" and p.idTipoCargo.idTipoCargo="+t.getIdTipoCargo();}
            
            String sql = "SELECT p FROM Publicacion p where "
                       + " (p.idEstadoPublicacion.idEstadoPublicacion=1 or p.fechaFin>CURRENT_DATE) "+where+" "
                       + " order by p.idPublicacion desc";  
            System.out.println(sql);
            Query q = em.createQuery(sql); 
            q.setFirstResult((int) pg*10);
            q.setMaxResults(10);            
            publicaciones = q.getResultList();        
        } catch (NoResultException e) {
                System.out.println("Sin resultados");
        }
        return publicaciones;
    }   
    public long CantidadPublicacioneActiva() {        
        long c=0; 
        Date date= new Date();
        try {        
            String sql = "SELECT count(p) FROM Publicacion p where (p.idEstadoPublicacion.idEstadoPublicacion=1 or p.fechaFin>CURRENT_DATE) order by p.idPublicacion desc";            
            Query q = em.createQuery(sql);            
            c = (long) q.getSingleResult();
        } catch (NoResultException e) {
                System.out.println("Sin resultados");
        }
        return c;
    }    
    public List<Publicacion> publicacionePE(Integer emp, Integer estado, Date Freg) {
        
        List<Publicacion> publicaciones=null;
        String where="";
                
        if(estado!=null){  
            where=" and p.idEstadoPublicacion.idEstadoPublicacion="+estado;
        }
        if(Freg!=null && Freg.toString().trim()!=""){  
            where+=" and p.fechaReg=:Fech";
        }
        
        try {        
            String sql = "SELECT p FROM Publicacion p where p.idEmpresa.idEmpresa="+emp+" "+where+" order by p.idPublicacion desc";            
            Query q = em.createQuery(sql); 

            if(Freg!=null && Freg.toString().trim()!=""){  
                q.setParameter("Fech",Freg,TemporalType.DATE);
            }            
               
            publicaciones = q.getResultList();        
        } catch (NoResultException e) {
                System.out.println("Sin resultados");
        }
        return publicaciones;
    }
    public long CantidadPublicacionePE(Integer emp, EstadoPublicacion est) {
        
        long c=0;
        
        String where="";
        
        if(est!=null){  
            where=" and p.idEstadoPublicacion.idEstadoPublicacion="+est.getIdEstadoPublicacion();
        }
        
        try {                
            String sql = "SELECT count(p) FROM Publicacion p where p.idEmpresa.idEmpresa="+emp+" "+where+" ";
            Query q = em.createQuery(sql);             
            c = (long) q.getSingleResult();        
        } catch (NoResultException e) {
                System.out.println("Sin resultados");
        }
        return c;
    }     
}
